package cn.fldong.dao;

import cn.fldong.model.Score;
import java.sql.SQLException;
import java.util.List;
import java.math.BigDecimal;

/**
 * Score数据访问接口，定义成绩相关的数据库操作
 */
public interface ScoreDAO {
    /**
     * 根据成绩ID查询成绩
     * @param scoreId 成绩ID
     * @return 成绩对象
     * @throws SQLException 数据库操作异常
     */
    Score getScoreById(String scoreId) throws SQLException;
    
    /**
     * 根据学生ID查询成绩
     * @param studentId 学生ID
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getScoresByStudentId(String studentId) throws SQLException;
    
    /**
     * 根据课程ID查询成绩
     * @param courseId 课程ID
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getScoresByCourseId(String courseId) throws SQLException;
    
    /**
     * 根据学生ID和课程ID查询成绩
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 成绩对象
     * @throws SQLException 数据库操作异常
     */
    Score getScoreByStudentAndCourse(String studentId, String courseId) throws SQLException;
    
    /**
     * 查询所有成绩
     * @return 成绩列表
     * @throws SQLException 数据库操作异常
     */
    List<Score> getAllScores() throws SQLException;
    
    /**
     * 添加成绩
     * @param score 成绩对象
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean addScore(Score score) throws SQLException;
    
    /**
     * 更新成绩
     * @param score 成绩对象
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean updateScore(Score score) throws SQLException;
    
    /**
     * 删除成绩
     * @param scoreId 成绩ID
     * @return 受影响的行数
     * @throws SQLException 数据库操作异常
     */
    boolean deleteScore(String scoreId) throws SQLException;
    /**
     * 检查学生课程成绩是否已存在
     * @param studentId 学生ID
     * @param courseId 课程ID
     * @return 如果存在返回true，否则返回false
     * @throws SQLException 数据库操作异常
     */
    boolean scoreExists(String studentId, String courseId) throws SQLException;
}